﻿namespace Wlx.LogAnalysis.Application.Models
{
    public static partial class StringPatternFormatter
    {
        public static string 减号符 = "\\-";
        public static string 小数点 = "\\.";
        public static string 数值 = 单词字符.或者(减号符, 小数点).一次或多次();
        public static string 方法及数值字符 = 非空白字符.或者(空白字符).一次或多次() + ":" + 单词字符.或者(减号符, 小数点).一次或多次();

        public static string FormatLinePattern()
        {
            var 编码区 = 提取(一到多个单词字符);                 // (\\w+)
            var 编码区留白 = 一到多个空白字符;                   // \\s+

            var 方法数值区 = 提取(方法及数值字符);               // ([\\S|\\s]+:[\\d|\\-|\\.]+)
            var 方法数值区留白 = 一到多个空白字符;               // \\s+

            var 单位区 = 提取(单词字符.或者(减号符).一次或多次());      // ([\\w|\\-]+)
            var 单位区留白 = 一到多个空白字符;                   // \\s+

            var 结果区 = 提取(一到多个单词字符);                 // (\\w+)
            var 结果区留白 = 一到多个空白字符;                   // \\s+

            var 最小值区 = 提取(数值);                          // ([\\w|\\-|\\.]+)
            var 最小值区留白 = 一到多个空白字符;                 // \\s+

            var 最大值区 = 提取(数值);                          // ([\\w|\\-|\\.]+)
            var 最大值区留白 = 零到多个空白字符;                 // \\s*

            var pattern = 起始符 + 编码区 + 编码区留白 + 方法数值区 + 方法数值区留白 + 单位区 + 单位区留白
                 + 结果区 + 结果区留白 + 最小值区 + 最小值区留白 + 最大值区 + 最大值区留白 + 结束符;

            // old:  ^(\\w+)\\s+(\\S+)\\s+:([\\w-\\.]+)\\s+([\\w-]+)\\s+(\\w+)\\s+([\\w-\\.]+)([\\d|\\.|\\s]+)([\\w-\\.]+)\\s*$
            // new:  ^(\\w+)\\s+([\\S|\\s]+:[\\d|\\-|\\.]+)\\s+([\\w|\\-]+)\\s+(\\w+)\\s+([\\w|\\-|\\.]+)\\s+([\\w|\\-|\\.]+)\\s*$
            return pattern;
        }


        
    }
}
